Reporting Services übergabe von Parameter-Bitwerten
Mehrwertige Parameter im SQL Server Reporting Services sind sowohl Fluch als wie auch Segen, denn der Umgang mit diesen setzt einiges an Visual Basic Wissen voraus. Sehr häufig kommt man mit einem Join Ausdruck an sein Ziel, nicht aber wenn mit Bits gearbeitet werden muss. Hier muss dann häufig die Summe aus den Parameter Werten ermittelt werden.
="SELECT ID FROM Laender WHERE (ID & (" & Join(Parameters!Laender.Value, "+") & ") > 0)"
Das Ergebnis dieser Operation, wenn der Benutzer das Land 1 und 2 ausgewählt hat, ist folgendes SQL Statement:
SELECT * FROM Laender WHERE (ID & (1+2) & ") > 0)"
Entsprechend findet folgende Bitoperation statt: Feldwert & 3 entspricht Feldwert & 0011
Beispiel:
Integer | Bit | Anzeige |
1 | 0001 | Ja |
2 | 0010 | Ja |
4 | 0100 | Nein |
7 | 0111 | Ja |
3 | 0011 | Ja |
8 | 1000 | Nein |
9 | 1001 | Ja |
Alternativ kann das ganze auch in VB Code umgesetzt werden:
Public Function ArraySum(arr() As Object) As Long
Dim i As Long, summe as Long
For Each i In arr
summe = summe + i
Next i
ArraySum = summe
End Function
Dieser Funktion kann ein Mehrwertiger Parameter übergeben werden, als Ergebnis kommt die Summe der Values der angewählten Parameter. Diese Funktion kann nun in einem Parameter der als "Intern" gekennzeichnet ist, als Standartwert angegeben werden.
Der Aufruf geht folgendermassen:
=Code.ArraySum(Parameters!Laender.Value)
Der Vorteil dieser Methode ist das die Abfrage wie gewohnt geschrieben werden kann, also der Abfragedesigner weiterhin verwendet werden kann, die Abfrage sieht dann in etwa so aus:
SELECT *
FROM Datentabelle
WHERE (ID & @Bits > 0)
Viel Spaß bei der Umsetzung Ihres Problems.
Haben Sie Fragen oder Anmerkungen? Ich stehe Ihnen gerne zur Verfügung Ihr Frank Glück